#version 450

#extension GL_EXT_buffer_reference : enable

layout(buffer_reference) buffer bufType1 { int x; };
layout(buffer_reference) buffer bufType2 { int x; };
layout(buffer_reference) uniform bufType3 { int x; };

layout(buffer_reference) buffer;
layout(buffer_reference) uniform;
layout(buffer_reference) in;
layout(buffer_reference) out;
layout(buffer_reference) in badin { float x; } badin2;
layout(buffer_reference) out badout { float x; } badout2;

layout(buffer_reference) buffer bufType5;

layout(buffer_reference) buffer bufType6 { int x[]; };

layout(buffer_reference, std140, buffer_reference_align = 16) buffer bufType7;
layout(buffer_reference) buffer bufType7 { int x[]; };

buffer bufType4 {
    bufType1 b1;
    bufType2 b2;
    bufType3 b3;
    bufType6 b6;
    bufType7 b7;
} b4;

void f()
{
    bufType6 b;
    b.x.length();
    b4.b6.x.length();
    b[2];               // ERROR, can't index due to unsized array
}

void main() {
    bufType2 x1 = b4.b1;
    bufType2 x2 = bufType2(b4.b1);
    bufType2 x3 = bufType2(b4.b2);
    bufType2 x4 = bufType2(b4.b3);

    b4.b1 = b4.b2;
    b4.b1 = b4.b3;
    b4.b3 = b4.b2;
}

layout(buffer_reference) uniform bufType5 { int x; };
